const express = require('express');
const cors = require('cors');
const fs = require('fs-extra');
const path = require('path');
const app = express();
app.use(cors());

// 创建一个存储文件的目录
const uploadDir = path.join(__dirname, 'uploads');
if (!fs.existsSync(uploadDir)) {
  fs.mkdirSync(uploadDir);
}

/*  ------ 分片上传 开始 -------- */
// 临时文件夹，切片文件将会被上传到这个文件夹中
const TEMP_DIR = path.resolve(__dirname, "temp");
// 上传文件夹，文件将会被移动到这个文件夹中
const UPLOADS_DIR = path.resolve(__dirname, "uploads");

// 确保临时文件夹存在
fs.ensureDir(TEMP_DIR);
// 确保上传文件夹存在
fs.ensureDir(UPLOADS_DIR);

// 创建一个接口，接受分片文件
app.post("/uploadChunk", async (req, res) => {
  // // 获取文件名
  // const { filename } = req.params;
  // // 切片名
  // const { chunkFilename } = req.query;
  // // 拼接切片文件夹路径
  // const chunkDir = path.resolve(TEMP_DIR, filename);
  // // 确保切片文件夹存在
  // await fs.ensureDir(chunkDir);
  // // 拼接文件路径
  // const chunkPath = path.resolve(chunkDir, chunkFilename);
  // // 创建可读流
  // const ws = fs.createWriteStream(chunkPath);
  // // 将可读流中的数据写入到可写流中，完成文件上传
  // await pipeStream(req, ws);
  // 响应结果
  res.json({ success: true , message: req.query});
});


// 创建一个接口，合并分片文件









/*  ------ 分片上传 结束 -------- */
/**
 * 数据从可读流流向可写流
 * @param {ReadableStream} rs 可读流
 * @param {WritableStream} ws 可写流
 * @returns 返回一个Promise，当流结束时，Promise会被resolve
 */
const pipeStream = (rs, ws) => {
  return new Promise((resolve, reject) => {
    rs.pipe(ws).on('finish', resolve).on('error', reject);
  });
};

app.post('/upload/:fileName', async (req, res) => {


  const fileName = req.params.fileName;
 
  // 拼接文件路径
  const filePath = path.resolve(uploadDir, fileName);
  // 创建可写流
  const ws = fs.createWriteStream(filePath);
  // 将可读流中的数据写入到可写流中，完成文件上传
  await pipeStream(req, ws);
  res.json({ success: true });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
